package sess

import (
	"io"
	"net"

	"gitee.com/night-tc/gobige/msgdef"
)

//////////////////////////////////////////////////////////////////////

func readARQMsgForward(conn net.Conn) (msgdef.IMsg, uint16, error) {

	if conn == nil {
		return nil, 0, Err_Sess_Not_Exist
	}

	msgHead := make([]byte, MsgHeadSize-msgIDSize)

	if _, err := io.ReadFull(conn, msgHead); err != nil {
		return nil, 0, err
	}

	msgSize := (int(msgHead[0]) | int(msgHead[1])<<8 | int(msgHead[2])<<16)
	compressFlag := msgHead[3]
	if msgSize > MaxMsgBuffer || msgSize <= 0 {
		return nil, 0, Err_Data_Len_Over.NewErr(nil, msgSize)
	}

	msgData := make([]byte, msgSize)

	if _, err := io.ReadFull(conn, msgData); err != nil {
		return nil, 0, err
	}

	msgID := GetMsgID(msgData)
	if msgdef.GetTypeMgr().IsMsgExist(msgID) {
		msg, err := DecodeMsg(compressFlag, msgData)
		return msg, msgID, err
	}
	return nil, msgID, nil

}
